/*
 *Vérifie que l'ordonnanceur ne favorise pas l'exécution d'un thread sur les autres
 */

#include <stdlib.h>
#include <stdio.h>
#include "thread.h"
#include <assert.h>


static void * threadfunc(void * arg)
{
  char *name = arg;
  //  printf("je suis le thread %p, lancé avec l'argument %s\n",
  //	 thread_self(), name);
  thread_yield();
  //printf("je suis encore le thread %p, lancé avec l'argument %s\n",
  //  thread_self(), name);
  thread_yield();
//printf("je suis encore et toujours le thread %p, lancé avec l'argument %s\n",
  //thread_self(), name);
  thread_yield();
//printf("je suis encore et pour la dernière fois le thread %p, lancé avec l'argument %s\n",
  //thread_self(), name);
  thread_exit(arg);
}


void ordonnancement_test(void){

  thread_t thread1;
  thread_t thread2;
  thread_t thread3;
  //void * retval;
  int err;
  
  err = thread_create(&thread1,threadfunc,"thread1");
  assert(!err);
  err = thread_create(&thread2,threadfunc,"thread2");
  assert(!err);
  err = thread_create(&thread3,threadfunc,"thread3");
  assert(!err);
  
  err = thread_yield();
  assert(!err);
  err = thread_yield();
  assert(!err);
  err = thread_yield();
  assert(!err);


  
}


int main(){

  ordonnancement_test();

}
